import java.util.Scanner;
import java.util.Set;      // 想想为什么会使用这个？
//Set 是 Java 集合框架中的一个接口，表示一个不包含重复元素的集合。
import java.util.HashSet;  // 想想为什么会使用这个？


public class Main6{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String words = in.nextLine();
        System.out.println(MorseCode.translate(words));
    }
}

class MorseCode{
    public static int translate(String words){
        //用数组存储24个字母的ASCII码
        String[] MOS = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};

        //建立一个translations的HashSet型存放每个单词对应的摩尔斯码表示
        Set<String> translations = new HashSet<>();

        //以空格分割words字符串中的单词在wordsArray数组里
        String[] wordsArray = words.split(" ");

        //遍历数组里的每一个单词
        for(String word : wordsArray){

            //创建一个新的tmp字符串来存储
            StringBuilder tmp = new StringBuilder();

            //toCharArray方法将每一个单词分成一个个字母，在MOS数组中找出对应的摩尔斯码，添加进tmp字符串中
            for(char ch : word.toCharArray()){
                tmp.append(MOS[ch-'a']);
            }

            //toString()方法将tmp中的字符转换为字符串,并用HashSet类的translations自动去除重复的内容
            translations.add(tmp.toString());
        }
        //translations中元素的个数即为答案
        return translations.size();
    }
}